<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      // 一.创建对象原型属性和方法；
      var obj = Object.create({ name: "张三", age: 20 });
      //    console.log(obj);

      // 二.隐式原型 __proto__  [[prototype]]
      //   _this  __proto__  $$a  $$$b; 私有成员；
      //   let obj = {
      //     name: "张三",
      //   };
      //   console.log(obj);
      // //   console.log(obj["[[Prototype]]"]);
      //   console.log(obj.__proto__); // 不规范的；

      // 浏览器提供2个函数操作隐式原型 ；
      // 1.获取隐式原型；
      var res = Object.getPrototypeOf(obj);
      console.log(res);

      // 2.设置隐式原型
      Object.setPrototypeOf(obj, { age: 20 });
      console.log(obj);

      // 三、原型的 constructor固有属性；
      // 指代不明；

      // function Perosn1(name){
      //     this.name = name;
      // }

      // function Person2(name){
      //     this.name = name;
      // }

      // let zhangsan1 = new Perosn1("张三1");
      // let zhangsan2 = new Person2("张三2");
      // if(zhangsan1.constructor===Perosn1){
      //     console.log("张三1是Person1构造出来的");
      // }

      // let arr = new Array();
      // let obj = new Object();
      // let arr = [];
      // let obj = {};
      // // 1.区分类型 Object.prototype.toString.call();
      // // 2.Array.isArray();
      // if(arr.constructor===Array){
      //         console.log("是一个数组");
      // }

      // if(obj.constructor===Object){
      //     console.log("是一个对象");
      // }

      // 四、扩展数组及对象方法；
      //   let arr = [1, 2, 3, 4];
      //   // Object.prototype.
      //   Array.prototype.myForEach = function (fn) {
      //     for (let i = 0; i < this.length; i++) {
      //       fn(this[i], i, this);
      //     }
      //   };

      //   arr.myForEach((item) => {
      //     console.log(item);
      //   });

      // console.log(arr);
      // arr.forEach(item=>{
      //     console.log(item);
      // })
    </script>
  </body>
</html>
